package com.plants.back.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.plants.back.pojo.PlantsManagent;
import com.plants.back.pojo.R;
import com.plants.back.pojo.Vo;
import com.plants.back.service.impl.PlantsManagentServiceImpl;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * <p>
 * 管理员控制器
 * </p>
 *
 * @author plants
 * @since 2024-08-06
 */
@CrossOrigin
@RestController
@RequestMapping("/plants_managent")
public class PlantsManagentController {

    @Resource
    private PlantsManagentServiceImpl managentService;

    // 注册
    @PostMapping("/register")
    public Vo<PlantsManagent> register(@RequestBody PlantsManagent managent) {
        // 按照用户账号查询
        LambdaQueryWrapper<PlantsManagent> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(StringUtils.isNotBlank(managent.getAccount()), PlantsManagent::getAccount, managent.getAccount());
        PlantsManagent one = managentService.getOne(wrapper);
        // 判断用户是否存在
        if (one != null) {
            // 存在，不允许注册
            return new Vo<>(false, "该账号已存在，请更换一个账号");
        } else {
            // 不存在注册
            // 进行注册,添加到数据库
            boolean b = managentService.save(managent);
            if (b) {
                return new Vo<>(b, "注册成功，请进行登录！");
            } else {
                return new Vo<>(b, "注册失败，请稍后重试！");
            }
        }
    }

    // 登录
    @PostMapping("/login")
    public Vo<PlantsManagent> login(@RequestBody PlantsManagent managent) {
        LambdaQueryWrapper<PlantsManagent> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(StringUtils.isNotBlank(managent.getAccount()), PlantsManagent::getAccount, managent.getAccount());
        wrapper.eq(StringUtils.isNotBlank(managent.getPassword()), PlantsManagent::getPassword, managent.getPassword());
        PlantsManagent one = managentService.getOne(wrapper);
        if (one != null) {
            // 表示账号和密码正确，登录成功！
            return new Vo<>(true, one.getId());
        } else {
            // 表示密码或者账号不正确，需要提示用户重新输入！
            return new Vo<>(false, "账号或密码不正确，请重新输入！");
        }
    }

    // 修改密码
    @PostMapping("/updatePass")
    public Vo<PlantsManagent> updatePass(@RequestBody PlantsManagent managent) {
        // 需要根据管理员的id和旧密码进行对比，如果id和旧密码可以对上，那么就允许管理员的密码
        UpdateWrapper<PlantsManagent> wrapper = new UpdateWrapper<>();
        wrapper.eq("id", managent.getId());
        wrapper.eq("password", managent.getAccount());
        wrapper.set("password",managent.getPassword());
        boolean b = managentService.update(wrapper);
        if (b) {
            // 在这里表示修改成功，
            return new Vo<>(b, "修改密码成功，请重新登录！");
        } else {
            return new Vo<>(b, "修改密码失败，请确认旧密码是否输入正确！");
        }
    }

    // 修改管理员信息
    @PostMapping("/update")
    public Vo<PlantsManagent> update(@RequestBody PlantsManagent managent) {
        // 这个并不需要进行判断，可以直接进行信息的修改
        boolean b = managentService.updateById(managent);
        if (b) {
            return new Vo<>(b,"修改个人信息成功！");
        }else {
            return new Vo<>(b,"修改个人信息失败，请稍后重试！");
        }
    }

    // 查询个人信息
    @GetMapping("/userinfo/{id}")
    public Vo<PlantsManagent> userInfo(@PathVariable("id") String id) {
        LambdaQueryWrapper<PlantsManagent> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(PlantsManagent::getId,id);
        PlantsManagent one = managentService.getOne(wrapper);
        if (one == null) {
            return new Vo<>(false,"请稍后重试！");
        }else {
            return new Vo<>(true,one);
        }
    }

}
